home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / relnotes / compiler_dev / ch3.z / ch3
Text File  |  1998-11-02  |  37KB  |  924 lines

  1.  
  2.  
  3.  
  4.                                                - 1 -
  5.  
  6.  
  7.  
  8.                     Base Development 7.2.1 Release Notes
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.                                                - 2 -
  69.  
  70.  
  71.  
  72.                     DDDDooooccccuuuummmmeeeennnntttt NNNNuuuummmmbbbbeeeerrrr 000000008888----1111777788882222----000033330000
  73.  
  74.  
  75.  
  76.                     3.  _N_e_w__F_e_a_t_u_r_e_s__o_f__T_h_i_s__R_e_l_e_a_s_e
  77.  
  78.                     The features in this chapter are new or
  79.                     significantly changed in the Base Compiler
  80.                     Development software since the MIPSpro 7.1
  81.                     release.  Other older features of note are also
  82.                     discussed.
  83.  
  84.  
  85.                     3.1  _N_e_w__M_a_n__P_a_g_e_s__f_o_r__M_I_P_S_p_r_o__7_._2_._1
  86.  
  87.  
  88.                     The opt(5), lno(5) and o32(5) man pages now
  89.                     provide information about their specific
  90.                     options. In the past, this information was
  91.                     bundled in the cc(1), CC(1), f77(1) and f90(1)
  92.                     man pages.  Also included in MIPSpro 7.2.1 are
  93.                     the omp_lock(3), omp_nested(3) and
  94.                     omp_threads(3) man pages which are useful when
  95.                     doing development for multiprocessors.
  96.  
  97.  
  98.                     3.2  _N_e_w__A_u_t_o_m_a_t_i_c__P_a_r_a_l_l_e_l_i_z_a_t_i_o_n__O_p_t_i_o_n
  99.  
  100.  
  101.                     The 7.2 release of the MIPSpro compilers marked
  102.                     a major revision of the auto-parallelizer. The
  103.                     new product incorporates automatic
  104.                     parallelization into the other optimizations
  105.                     performed by the MIPSpro compilers.  Previous
  106.                     versions relied on preprocessors to provide
  107.                     source-to-source conversions prior to
  108.                     compilation. This change provides several
  109.                     benefits to developers:
  110.  
  111.                     Automatic parallelization is integrated with
  112.                     optimizations for single processors
  113.  
  114.                     A set of options and pragmas consistent with the
  115.                     rest of the MIPSpro compilers
  116.  
  117.                     Better run-time and compile-time performance
  118.  
  119.                     For more information, please refer to the
  120.                     auto_p(5) man pages.
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.                                                - 3 -
  135.  
  136.  
  137.  
  138.                     NOTE: In order to run the new automatic
  139.                     parallelization, you must purchase the MIPSpro
  140.                     Auto Parallelization Option (SC4-APO-7.2) and
  141.                     install the license for it (FEATURE name string
  142.                     = auto_pp).
  143.  
  144.  
  145.  
  146.                     3.3  _C_o_m_p_i_l_e_r__S_y_s_t_e_m__C_h_a_n_g_e_s
  147.  
  148.                     This section lists changes and additions to
  149.                     compilers and development tools since the
  150.                     MIPSpro 7.1 release.
  151.  
  152.  
  153.                     3.3.1  _N_e_w__O_p_t_i_o_n_s__a_n_d__D_e_f_a_u_l_t_s__i_n__M_I_P_S_p_r_o__7_._2_._1
  154.                      The following new options which control the
  155.                     inlining of memory intrinsics
  156.                      have been added to the -_O_P_T option group:
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.                                                - 4 -
  201.  
  202.  
  203.  
  204.  
  205.                     -OPT:....
  206.  
  207.                       mem_intrinsics[=(OFF|ON)]
  208.                         Enable inlining of memory intrinsics
  209.                         (memcpy, memmove, memset, bcopy, bzero,
  210.                         blkclr) in some cases. This option has
  211.                         an effect only if the corresponding
  212.                         procedure has a "#pragma intrinsic"
  213.                         for it. The standard include files
  214.                         contain this pragma for these routines
  215.                         (string.h, memory.h, bstring.h, strings.h).
  216.                         Note that the pragmas are disabled by
  217.                         default with the -ansi option. The option
  218.                         -D__INLINE_INTRINSICS can be used to
  219.                         enable intrinsics in the -ansi mode.
  220.                         (default OFF)
  221.  
  222.  
  223.                       memcpy_cannot_overlap[(OFF|ON)]
  224.                         The compiler assumes by default that
  225.                         the operands of the "memcpy" routine
  226.                         can overlap. This option allows the
  227.                         compiler to assume that the operands do
  228.                         not overlap and can thus generate
  229.                         better code. (default OFF)
  230.  
  231.                       bcopy_cannot_overlap[(OFF|ON)]
  232.                         The compiler assumes by default that
  233.                         the operands of the "bcopy" routine
  234.                         can overlap. This option allows the
  235.                         compiler to assume that the operands
  236.                         do not overlap and can thus generate
  237.                         better code. (default OFF)
  238.  
  239.                       memmove_cannot_overlap[(OFF|ON)]
  240.                         The compiler assumes by default that the
  241.                         operands of the "memmove" routine can
  242.                         overlap. This option allows the compiler
  243.                         to assume that the operands do not overlap
  244.                         and can thus generate better code.
  245.                         (default OFF)
  246.  
  247.                       memmove_count=n
  248.                         Specify the maximum number of instructions
  249.                         that will be generated in the inline
  250.                         expansion for the memory intrinsics.
  251.                         (default 16)
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.                                                - 5 -
  267.  
  268.  
  269.  
  270.                     3.3.2  _-_O_P_T_:_I_E_E_E___c_o_m_p_a_r_i_s_o_n_s_=_noption   For
  271.                     MIPSpro 7.2.1 the -OPT:IEEE_comparisons=n option
  272.                     has been renamed to -OPT:IEEE_NaN_inf=n whose
  273.                     definition under the -OPT option control group
  274.                     is as follows:
  275.  
  276.  
  277.                       IEEE_NaN_inf=n
  278.  
  279.                         IEEE_NaN_inf=ON forces all  operations which might have
  280.                         IEEE-754  NaN or infinity operands to yield results
  281.                         that conform to ANSI/IEEE 754-1985, the IEEE Standard for
  282.                         Binary Floating-point Arithmetic, which specifies
  283.                         standard for NaN and inf operands.  Specify ON or OFF for
  284.                         setting.  The default is IEEE_NaN_inf=OFF.
  285.  
  286.                         IEEE_NaN_inf=OFF produces non-IEEE results for various
  287.                         operations.  For example, x=x is treated as TRUE without
  288.                         executing a test, and x/x will be simplified to 1
  289.                         without dividing.  Turning this option on may suppress
  290.                         many such common optimizations and hurt performance as a
  291.                         result.
  292.  
  293.  
  294.                     For more information please consult the new man
  295.                     page opt(5).
  296.  
  297.  
  298.  
  299.  
  300.                     3.3.3  _N_e_w__O_p_t_i_o_n_s__a_n_d__D_e_f_a_u_l_t_s__i_n__M_I_P_S_p_r_o__7_._2
  301.                     A new -_D_E_B_U_G:_o_p_t_i_o_n control group has been
  302.                     created to allow insertion of code to assist in
  303.                     the debugging of programs.  For example,
  304.                     -_D_E_B_U_G:_d_i_v__c_h_e_c_k=_N replaces -_T_E_N_V:_c_h_e_c_k__d_i_v=_N
  305.                     and the 7.2 compiler, by default, inserts code
  306.                     to check for divide by zero (N=1).
  307.  
  308.                     _N_O_T_E:  The default value for -_T_E_N_V:_c_h_e_c_k__d_i_v=_N
  309.                     under MIPSpro 7.1 was N=0 (no checks).
  310.  
  311.                     For more information, please refer to the _c_c(1)
  312.                     and _D_E_B_U_G__g_r_o_u_p(5) man pages.
  313.  
  314.                     The -_L_I_S_T: options control group has been
  315.                     enhanced to the create a listing file (.l) that
  316.                     contains the values of all flags  modified,
  317.                     directly in the command line, or indirectly as a
  318.                     side effect of other options. For example:
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.                                                - 6 -
  333.  
  334.  
  335.  
  336.                     % cc -n32 -LIST:options=ON foo.c
  337.  
  338.                     will create foo.l which contains a listing that
  339.                     contains the default values of certain options
  340.                     from the -OPT, -LNO, -TARG and -TENV option
  341.                     control groups.
  342.  
  343.                     The following command:
  344.  
  345.                     % cc -n32 -LIST:all_options=ON foo.c
  346.  
  347.                     will create foo.l which contains a listing that
  348.                     contains the default values of all options from
  349.                     all of the option control groups.
  350.  
  351.                     For more information, please refer to the _c_c(1)
  352.                     man page.
  353.  
  354.  
  355.  
  356.                     3.3.4  _O_b_s_o_l_e_t_e__O_p_t_i_o_n_s   Several compile-time
  357.                     flags have been obsoleted.  These include:
  358.                     -_T_E_N_V:_m_i_s_a_l_i_g_n_e_m_n_t=_N, -_T_E_N_V:_a_l_i_g_n__e_x_t_e_r_n=_N and
  359.                     -_T_E_N_V:_a_l_i_g_n_e_d=_T_R_U_E.  Their use will generate a
  360.                     warning message in both the compiler front-end
  361.                     and backend. For example:
  362.  
  363.                     % cc -n32 -TENV:misalignment=3 reshape.c
  364.                     Warning: Obsolete option "-TENV:misalignment=3" -- ignored
  365.                     Warning: Obsolete option "-TENV:misalignment=3" -- ignored
  366.  
  367.                     The -_T_E_N_V:_v_a_r_a_r_g_s__p_r_o_t_o_t_y_p_e_s=_T_R_U_E flag has been
  368.                     replaced by -_D_E_B_U_G:_v_a_r_a_r_g_s__p_r_o_t_o_t_y_p_e_s=_T_R_U_E.
  369.  
  370.                     For more information, please refer to the _c_c(1)
  371.                     and _D_E_B_U_G__g_r_o_u_p(5) man pages.
  372.  
  373.  
  374.  
  375.                     3.3.5  _C_o_m_p_i_l_e_r__D_e_f_a_u_l_t_s  When invoking the
  376.                     compiler, ----33332222 ----mmmmiiiippppssss2222 is assumed on all machines
  377.                     except those based on the R8000 processor.
  378.                     There, the compilations default to ----66664444 ----mmmmiiiippppssss4444.
  379.                     These defaults can, of course, be overridden at
  380.                     the command line or through the use of the
  381.                     _S_G_I__A_B_I environment variable. For more
  382.                     information on these flags, please refer to the
  383.                     _c_c(1), _f_7_7(1) and _a_b_i(5) man pages.
  384.  
  385.                     The MIPSpro 7.1 compiler introduced a new method
  386.                     by which the user can customize the Application
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.                                                - 7 -
  399.  
  400.  
  401.  
  402.                     Binary Interface (ABI), instruction set
  403.                     architecture (ISA) and processor type used in
  404.                     compilations where they are not explicitly
  405.                     specified.  Under this method, the
  406.                     COMPILER_DEFAULTS_PATH environment variable can
  407.                     be set to a colon separated list of paths where
  408.                     the compiler will look for a _c_o_m_p_i_l_e_r._d_e_f_a_u_l_t_s
  409.                     file. If no _c_o_m_p_i_l_e_r._d_e_f_a_u_l_t_s file is found or
  410.                     if the environment variable is not set, the
  411.                     compiler looks for /_e_t_c/_c_o_m_p_i_l_e_r._d_e_f_a_u_l_t_s.  If
  412.                     that file is not found either, the compiler
  413.                     resorts to the built-in defaults described in
  414.                     the _c_c(1)man pages and above.  For a description
  415.                     of the specification format of this file, please
  416.                     refer to the _c_c(1)man pages.
  417.  
  418.  
  419.  
  420.                     3.3.6  _W_H_I_R_L _I_n_t_e_r_m_e_d_i_a_t_e _O_b_j_e_c_t _F_i_l_e _F_o_r_m_a_t
  421.                     _C_h_a_n_g_e_s   The format of WHIRL Intermediate
  422.                     Object files has changed.  If you have WHIRL
  423.                     intermediate (.o) files left over from
  424.                     compilations using MIPSpro 7.1 with
  425.                     interprocedural optimization enabled (i.e.
  426.                     -IPA), you must recompile the entire set of
  427.                     files. Whirl Intermediate Object files are
  428.                     compatible between MIPSpro 7.2.1 and MIPSpro
  429.                     7.2.
  430.  
  431.  
  432.                     3.3.7  _A_B_I__D_e_v_e_l_o_p_m_e_n_t  For information about
  433.                     ABI development issues, see the man pages
  434.                     _a_b_i_c_c(_1), _a_b_i_l_d(_1), _c_h_e_c_k__a_b_i__c_o_m_p_l_i_a_n_c_e,
  435.                     _c_h_e_c_k__a_b_i__i_n_t_e_r_f_a_c_e and _c_h_e_c_k__f_o_r__s_y_s_c_a_l_l_s.
  436.  
  437.                     3.3.8  _C_o_n_t_r_o_l_l_i_n_g__CCCC_GGGG__c_o_m_p_i_l_e_r__o_p_t_i_m_i_z_a_t_i_o_n_s  _C_G
  438.                     is the code-generation part of the compiler.
  439.                     There are choices to be made in many parts of
  440.                     _C_G, e.g.  what conditional constructs should be
  441.                     if-converted, or how much should a loop be
  442.                     unrolled.  In most cases the compiler should be
  443.                     making reasonable decisions.  But there are
  444.                     still times when performance can be improved by
  445.                     modifying the default behavior.
  446.  
  447.                     The following sections describe a few of the
  448.                     ways that _C_G can be controlled by the user.
  449.  
  450.                        +o Non-loop if-conversion can be turned off
  451.                          with -_C_G:_i_f_c__n_o_n__l_o_o_p=_o_f_f.  Currently non-
  452.                          loop if-conversion only applies to simple
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.                                                - 8 -
  465.  
  466.  
  467.  
  468.                          if-then or if-then-else constructs with a
  469.                          very few conditionally executed
  470.                          instructions, so it should usually be
  471.                          advantageous to do the if-conversion.  (In
  472.                          fact we may increase the amount of this
  473.                          kind of if-conversion we do in future
  474.                          releases).  One reason the if-conversion
  475.                          could be sub-optimal is that one of the two
  476.                          paths through the code might be rarely
  477.                          executed.  (This can be controlled with
  478.                          -_C_G:_b_o_d_y__f_r_e_q__f_b=_n.  If some block in the
  479.                          loop has frequency less than 1/n times the
  480.                          frequency of the loop head, if-conversion
  481.                          for that loop is disabled.)
  482.  
  483.                        +o If-conversion of innermost loops is
  484.                          disabled with -_C_G:_i_f__c_o_n_v_e_r_s_i_o_n=_o_f_f.  The
  485.                          most likely reason that this would be
  486.                          useful is that if-conversion has increased
  487.                          the number of instructions in the loop by a
  488.                          lot, and the loop is Software Pipelined, so
  489.                          that there is no opportunity for
  490.                          reverse_if_conversion to undo the damage.
  491.                          Another way to protect against this
  492.                          possibility is by setting the value of
  493.                          -_C_G:_b_o_d_y__i_f_c__r_a_t_i_o.  For example, if
  494.                          -_C_G:_b_o_d_y__i_f_c__r_a_t_i_o=_2, and the number of
  495.                          instructions in the loop grows by more than
  496.                          a factor of 2 due to if-conversion, then
  497.                          the if-conversion will be undone (and of
  498.                          course there will then be no opportunity to
  499.                          Software Pipeline that loop).
  500.  
  501.                        +o Cross iteration optimizations can be
  502.                          disabled with -_C_G:_v_e_c_t_o_r__r_w__r_e_m_o_v_a_l=_o_f_f
  503.                          (for read-read or read-write
  504.                          optimizations), -_C_G:_v_e_c_t_o_r__w_w__r_e_m_o_v_a_l=_o_f_f
  505.                          (for write-write optimizations), and/or
  506.                          -_C_G:_c_r_o_s_s__i_t_e_r__c_s_e__r_e_m_o_v_a_l=_o_f_f (for common
  507.                          sub-expression elimination).  The reason to
  508.                          do this is that these optimizations can
  509.                          increase register pressure.
  510.  
  511.                        +o The unroll amount may be increased or
  512.                          decreased.  There is a heuristic controlled
  513.                          by -_O_P_T:_u_n_r_o_l_l__a_n_a_l_y_s_i_s (on by default)
  514.                          which is generally trying to minimize
  515.                          unrolling, because less unrolling leads to
  516.                          smaller code size and faster compilation.
  517.                          Usually the only thing that makes it unroll
  518.                          too much is its attempt to minimize the
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.                                                - 9 -
  531.  
  532.  
  533.  
  534.                          cost of penalties for taken branches.  If
  535.                          you set the penalty for such a branch to 0
  536.                          (-_C_G:_b_r_a_n_c_h__t_a_k_e_n__p_e_n_a_l_t_y=_0), or increase
  537.                          the cost for taken branches that the
  538.                          heuristic will tolerate (increase the value
  539.                          of -_C_G:_u_n_r_o_l_l__a_n_a_l_y_s_i_s__t_h_r_e_s_h_o_l_d from its
  540.                          default value of .1), you can probably
  541.                          avoid having loops unrolled too much.  You
  542.                          can also change the upper bound for the
  543.                          amount of unrolling with -_O_P_T:_u_n_r_o_l_l__t_i_m_e_s
  544.                          (default is 8) or -_O_P_T:_u_n_r_o_l_l__s_i_z_e (the
  545.                          number of instructions in the unrolled
  546.                          body, current default is 80).  In case the
  547.                          heuristic is limiting unrolling too much,
  548.                          it can be disabled with
  549.                          -_O_P_T:_u_n_r_o_l_l__a_n_a_l_y_s_i_s=_o_f_f.
  550.  
  551.                        +o Software Pipelining can be disabled with
  552.                          -_O_P_T:_s_w_p=_o_f_f.  As far as CG is concerned,
  553.                          -_O_3 -_O_P_T:_s_w_p=_o_f_f is the same as -_O_2.
  554.                          However, since LNO does not run at -_O_2, the
  555.                          input to CG can be very different, and the
  556.                          available aliasing information can be very
  557.                          different.
  558.  
  559.                        +o Reverse_if_conversion for non SWP'd loops
  560.                          can be disabled with -_C_G:_r_e_v_e_r_s_e__i_f=_o_f_f.
  561.  
  562.                     3.4  _C_h_a_n_g_e_s__t_o__dddd_bbbb_xxxx_(_1_)
  563.  
  564.                        +o _d_b_x has been enhanced to allow debugging of
  565.                          Fortran 90 allocatable arrays.
  566.  
  567.                        +o _d_b_x has been enhanced to allow debugging of
  568.                          Fortran 90 assumed shape arrays.
  569.  
  570.                        +o _d_b_x has been enhanced to allow debugging of
  571.                          C++ programs created with the -gslim
  572.                          option.  This option limits the amount of
  573.                          debugging information generated by the C++
  574.                          compiler for class definitions.  You should
  575.                          consider using this option on large
  576.                          applications when you experience bloated
  577.                          object files, executables, or DSOs when
  578.                          compiling with -g. For more information
  579.                          refer to the CC(1) man pages.
  580.  
  581.                        +o _d_b_x has been enhanced to allow debugging of
  582.                          C++ code that contains exception handlers.
  583.                          For more information, refer to the _D_B_X
  584.                          _U_s_e_r'_s _G_u_i_d_e.
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.                                                - 10 -
  597.  
  598.  
  599.  
  600.                        +o _d_b_x has been enchanced to support pthreads
  601.                          debugging.  For more information, refer to
  602.                          the _D_B_X _U_s_e_r'_s _G_u_i_d_e.
  603.  
  604.                     3.5  _C_h_a_n_g_e_s__t_o__t_h_e__l_i_n_k_e_r__llll_dddd_(_1_)
  605.  
  606.  
  607.                     This linker provides some new features and
  608.                     better performance. For more information refer
  609.                     to the _l_d(1) man page.
  610.  
  611.                        +o As of release 5.0.1, the linker can adjust
  612.                          executables to avoid certain problems with
  613.                          early versions of the R4000.  If the
  614.                          ----nnnnoooo____jjjjuuuummmmpppp____aaaatttt____eeeeoooopppp flag is on (it is on by
  615.                          default), small amounts of padding are
  616.                          added between component objects to avoid
  617.                          placing a branch instruction at the end of
  618.                          a page.  Slightly smaller executables and
  619.                          significantly faster executables can result
  620.                          by turning this option off (using the
  621.                          ----aaaalllllllloooowwww____jjjjuuuummmmpppp____aaaatttt____eeeeoooopppp flag).  Binaries built
  622.                          either way should be compatible across all
  623.                          Silicon Graphics systems, but those made
  624.                          with ----nnnnoooo____jjjjuuuummmmpppp____aaaatttt____eeeeoooopppp (the default) often
  625.                          show performance gains on R4000 systems.
  626.                          These flags are irrelevant for programs
  627.                          compiled with ----mmmmiiiippppssss4444 because the R8000 and
  628.                          R10000 processors do not have this hardware
  629.                          bug and no padding is performed by the
  630.                          linker.
  631.  
  632.                          However, early versions of the R5000 may
  633.                          have problems if a jump or branch
  634.                          instruction occurs at an address 8 bytes
  635.                          before the end of an odd-numbered page, and
  636.                          if a load or store instruction immediately
  637.                          follows the jump or branch instruction. The
  638.                          6.2 and above releases of the linker work
  639.                          around this problem by padding sections of
  640.                          object files that exhibit the
  641.                          characteristics described above. This
  642.                          occurs by default for object files compiled
  643.                          for ----mmmmiiiippppssss4444. Binaries can be built without
  644.                          this fix by using the
  645.                          ----aaaalllllllloooowwww____rrrr5555kkkk____jjjjuuuummmmpppp____aaaatttt____eeeeoooopppp option.
  646.  
  647.                        +o The 6.2 release of the linker introduced an
  648.                          experimental new feature enabled by the
  649.                          ----mmmmuuuullllttttiiiiggggooootttt option. If you experience GOT
  650.                          Overflow problems in building your
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.                                                - 11 -
  663.  
  664.  
  665.  
  666.                          applications, you should try relinking with
  667.                          the ----mmmmuuuullllttttiiiiggggooootttt option as an alternative to
  668.                          recompiling with ----xxxxggggooootttt.
  669.  
  670.  
  671.                          NOTE: The 7.2.1 release of the linker
  672.                                enables ----mmmmuuuullllttttiiiiggggooootttt by default.
  673.  
  674.                        +o New options have been added to _l_d(1) for
  675.                          aligning variables in the global
  676.                          uninitialized data area (_b_s_s).  See the
  677.                          manual page for _l_d(1) for options with
  678.                          names beginning with ----XXXX.  These new options
  679.                          are unique to IRIX and might change across
  680.                          releases.
  681.  
  682.                     3.6  _A_s_s_e_m_b_l_e_r__(_aaaa_ssss_(_1_)_)
  683.  
  684.                        +o As of 6.2, the  assembler supports 64-bit
  685.                          instructions, and can generate 64-bit ELF
  686.                          object files.  The COFF format is not
  687.                          supported. The 64-bit and N32 objects
  688.                          contain DWARF debugging support rather than
  689.                          MDEBUG.
  690.  
  691.                        +o The calling conventions and register usage
  692.                          for 64-bit objects is different from the
  693.                          32-bit conventions, so you should become
  694.                          familiar with the new conventions.  The
  695.                          _M_I_P_S_p_r_o _6_4-_B_i_t _P_o_r_t_i_n_g _a_n_d _T_r_a_n_s_i_t_i_o_n _G_u_i_d_e
  696.                          is useful for porting code from 32 to 64
  697.                          bits.  Also see the standard include files
  698.                          <_r_e_g_d_e_f._h> and <_a_s_m._h> which are
  699.                          parameterized for 32-bit or 64-bit code.
  700.  
  701.                        +o Most of the optimizations like software
  702.                          pipelining and cross-basic-block scheduling
  703.                          have been removed from the assembler; these
  704.                          optimizations are now done in the back-end,
  705.                          and thus only happen for high-level code.
  706.                          The assembler still does instruction
  707.                          scheduling for the user.
  708.  
  709.                        +o There are three new assembler directives
  710.                          for the generation of 64-bit PIC
  711.                          (Position-Independent Code).   These
  712.                          directives are ignored if not doing a 64-
  713.                          bit shared (PIC) compile.
  714.  
  715.                        +o  ._c_p_s_e_t_u_p _r_e_g, _r_e_g_2/_o_f_f_s_e_t, _l_a_b_e_l
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.                                                - 12 -
  729.  
  730.  
  731.  
  732.                          By convention, reg == t9, and the label is
  733.                          the procedure entry.  The second argument
  734.                          can be either another register (for the
  735.                          case of a leaf routine with no frame) or a
  736.                          stack offset, and is used to store the
  737.                          value of $gp.  This directive expands into:
  738.  
  739.                          ssssdddd      ggggpppp,,,, ooooffffffffsssseeeetttt((((sssspppp))))
  740.                          lllluuuuiiii     ggggpppp,,,, %%%%hhhhiiii((((%%%%ggggpppp____rrrreeeellll((((llllaaaabbbbeeeellll))))))))
  741.                          ddddaaaaddddddddiiiiuuuu  ggggpppp,,,, ggggpppp,,,, %%%%lllloooo((((%%%%ggggpppp____rrrreeeellll((((llllaaaabbbbeeeellll))))))))
  742.                          ddddaaaadddddddduuuu   ggggpppp,,,, ggggpppp,,,, rrrreeeegggg
  743.  
  744.                        +o  ._c_p_r_e_t_u_r_n
  745.  
  746.                          This directive expands into:
  747.  
  748.                          lllldddd      ggggpppp,,,, ooooffffffffsssseeeetttt((((sssspppp))))
  749.  
  750.                          where "offset" is the same value used in
  751.                          the previous .cpsetup.
  752.  
  753.                        +o The .cpsetup/.cpreturn sequence replaces
  754.                          the .cpload/.cprestore sequence that is
  755.                          used in 32-bit PIC code.
  756.  
  757.                        +o The other new directive is
  758.                           ._c_p_l_o_c_a_l _r_e_g_1
  759.  
  760.                          It specifies a register (typically not $gp)
  761.                          to be used as context pointer.  It has
  762.                          effect only within a procedure (i.e., it is
  763.                          turned off automatically at the end of each
  764.                          procedure).
  765.  
  766.                          There are two new directives in the 7.00
  767.                          -n32/-64 assembler:
  768.  
  769.                        +o  ._d_y_n_s_y_m _n_a_m_e _v_a_l_u_e
  770.  
  771.                          This specifies the st_other field of the
  772.                          symbol, which can be "sto_default",
  773.                          "sto_internal", "sto_hidden", or
  774.                          "sto_protected".
  775.  
  776.                        +o  ._g_p_v_a_l_u_e _v_a_l_u_e
  777.  
  778.                          The gp value is used in %gp_rel relocations
  779.                          as an offset for the addend.  By default
  780.                          the value is 0.
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.                                                - 13 -
  795.  
  796.  
  797.  
  798.                          Chapter 8 of the _M_I_P_S_p_r_o _A_s_s_e_m_b_l_y _L_a_n_g_u_a_g_e
  799.                          _G_u_i_d_e contains descriptions of all of the
  800.                          directives supported by the assembler.
  801.  
  802.                        +o The _M_I_P_S_p_r_o _N_3_2 _A_B_I _H_a_n_d_b_o_o_k and the
  803.                          _M_I_P_S_p_r_o _6_4-_b_i_t _P_o_r_t_i_n_g _a_n_d _T_r_a_n_s_i_t_i_o_n _G_u_i_d_e
  804.                          contain examples of how to write assembly
  805.                          language programs for the the N32 and 64-
  806.                          bit ABI's respectively.
  807.  
  808.                     3.7  _L_i_b_r_a_r_i_e_s
  809.  
  810.                     The following changes to the libraries that are
  811.                     part of the compiler system were made in the 7.1
  812.                     release.
  813.  
  814.  
  815.                     3.7.1  _R_e_p_a_c_k_a_g_i_n_g__o_f__N_3_2__S_u_b_s_y_s_t_e_m_s   The
  816.                     _c_o_m_p_i_l_e_r__d_e_v._s_w_3_2 subsystems have been bundled
  817.                     into the _c_o_m_p_i_l_e_r__d_e_v._s_w subsystems and are no
  818.                     longer present as independent subsystems.
  819.  
  820.  
  821.                     3.7.2  _D_i_s_c_o_n_t_i_n_u_a_n_c_e _o_f _N_3_2 _a_n_d _6_4-_b_i_t _N_o_n-
  822.                     _s_h_a_r_e_d _L_i_b_r_a_r_i_e_s   N32 and 64-bit versions of
  823.                     non-shared libraries for SPEC
  824.                     (_c_o_m_p_i_l_e_r__d_e_v._s_w_3_2._s_p_e_c_l_i_b and
  825.                     _c_o_m_p_i_l_e_r__d_e_v._s_w_6_4._s_p_e_c_l_i_b) are no longer being
  826.                     shipped.
  827.  
  828.                     The following changes to the libraries that are
  829.                     part of the compiler system were made in the 6.2
  830.                     release.
  831.  
  832.                        +o The floating point exception handler
  833.                          package (libfpe) has been rewritten and
  834.                          released with support for programs compiled
  835.                          under ----mmmmiiiippppssss3333 or ----mmmmiiiippppssss4444. Refer to the
  836.                          _f_s_i_g_f_p_e(3f) and _h_a_n_d_l_e__s_i_g_f_p_e_s(3c) man
  837.                          pages.
  838.  
  839.                        +o Fast floating point libraries (libfastm)
  840.                          tuned for the R5000, R8000 and R10000,
  841.                          respectively, are now available when doing
  842.                          compilation for the 64-bit and N32 ABI's.
  843.                          New ----rrrr5555000000000000, ----rrrr8888000000000000 and ----rrrr11110000000000000000 compiler
  844.                          flags are provided which add the paths of
  845.                          these libraries to the head of the library
  846.                          search path. For more information refer to
  847.                          the _c_c(1) and _f_7_7(1) man pages.
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.                                                - 14 -
  861.  
  862.  
  863.  
  864.                     3.8  _P_e_r_f_o_r_m_a_n_c_e__T_o_o_l_s
  865.  
  866.                     This section includes changes to _p_i_x_i_e(1),
  867.                     _p_i_x_s_t_a_t_s(1), _p_r_o_f(1).
  868.  
  869.                        +o As of the 7.0 release, _p_i_x_i_e(1),
  870.                          _p_i_x_s_t_a_t_s(1), and _p_r_o_f(1) are no longer
  871.                          supported. Their functionality has been
  872.                          integrated into a new product called
  873.                          SpeedShop. Interested users are referred to
  874.                          SpeedShop's release notes for more
  875.                          information.
  876.  
  877.  
  878.                     3.9  _L_i_b_r_a_r_y__a_n_d__S_y_s_t_e_m__C_a_l_l__F_u_n_c_t_i_o_n_a_l_i_t_y
  879.  
  880.                     The following additions and changes were made to
  881.                     library and system call functionality between
  882.                     versions 5.3 and 6.2 of the IRIS Development
  883.                     Option (now being replaced by the IRIX
  884.                     Development Foundation).
  885.  
  886.                        +o The MIPSpro C compiler supports long double
  887.                          arithmetic using the ANSI C standard
  888.                          syntax.  Most of the standard
  889.                          transcendental functions in _l_i_b_m and _l_i_b_c
  890.                          are supported. See specific man pages for
  891.                          names and prototypes.  Most of the long
  892.                          double routines are named by prefixing the
  893.                          letter 'q' to the double precision
  894.                          routine's name; for example, _q_s_i_n is the
  895.                          long double version of _s_i_n.
  896.  
  897.                          The following long double routines are NOT
  898.                          supported in this release:  _a_c_o_s_h, _a_s_i_n_h,
  899.                          _a_t_a_n_h, _c_b_r_t, _d_r_a_n_d_4_8, _d_r_e_m, _e_r_a_n_d_4_8, _e_x_p_m_1.
  900.  
  901.                          See the man page for _m_a_t_h(3M) for details
  902.                          regarding long double arithmetic.  Note
  903.                          that long double operations on this system
  904.                          are only supported in "round to nearest
  905.                          rounding" mode (the default).  The system
  906.                          must be in "round to nearest rounding" mode
  907.                          when issuing long double arithmetic
  908.                          operations or calling any of the long
  909.                          double functions, or incorrect answers will
  910.                          result.
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.